package com.liujit.upms.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.liujit.common.domain.params.BaseParams;
import com.liujit.common.domain.result.PageBean;
import com.liujit.upms.domain.model.SysRole;
import com.liujit.upms.domain.params.SysRoleParams;
import com.liujit.upms.domain.params.SysRolePermParams;
import com.liujit.upms.domain.query.SysRoleQuery;
import com.liujit.upms.domain.result.SysRolePermResult;
import com.liujit.upms.domain.result.SysRoleResult;

import java.util.List;

/**
 * @Description 系统角色Service
 * @Author liujun
 * @Date 2021-07-02 15:01:11
 */
public interface SysRoleService extends IService<SysRole> {

    /**
     * 根据系统角色分页查询条件，分页查询系统角色列表
     *
     * @param query 系统角色分页查询条件
     * @return 分页列表结果
     * @author: liujun
     * @date: 2021/6/23 5:02 下午
     */
    PageBean<SysRoleResult> getPage(SysRoleQuery query);

    /**
     * 根据系统角色添加/修改请求参数，添加/修改系统角色
     *
     * @param params 系统角色添加/修改请求参数
     * @return 添加/修改结果
     * @author: liujun
     * @date: 2021-07-02 15:01:11
     */
    Boolean save(SysRoleParams params);

    /**
     * 根据系统角色id，查询系统角色
     *
     * @param id 系统角色id
     * @return 查询结果
     * @author: liujun
     * @date: 2021-07-02 15:01:11
     */
    SysRoleResult get(Long id);

    /**
     * 根据系统角色id，查询系统角色详情
     *
     * @param id 系统角色id
     * @return 查询结果
     * @author: liujun
     * @date: 2021/7/8 11:26 上午
     */
    SysRoleResult getDetail(Long id);

    /**
     * 根据系统角色删除请求参数，删除系统角色
     *
     * @param params 系统角色删除请求参数
     * @return 删除结果
     * @author: liujun
     * @date: 2021-07-02 15:01:11
     */
    Boolean del(BaseParams params);

    /**
     * 根据系统角色启用请求参数，启用系统角色
     *
     * @param params 系统角色启用请求参数
     * @return 启用结果
     * @author: liujun
     * @date: 2021-07-02 15:01:11
     */
    Boolean enabled(BaseParams params);

    /**
     * 根据系统角色禁用请求参数，禁用系统角色
     *
     * @param params 系统角色禁用请求参数
     * @return 禁用结果
     * @author: liujun
     * @date: 2021-07-02 15:01:11
     */
    Boolean disabled(BaseParams params);

    /**
     * 根据系统机构id，查询系统角色列表
     *
     * @param orgId 系统机构id
     * @return 系统角色列表
     * @author: liujun
     * @date: 2021/7/5 9:37 下午
     */
    List<SysRoleResult> getListByOrgId(Long orgId);

    /**
     * 根据系统机构id、系统角色名称查询系统角色条数
     *
     * @param id    角色id
     * @param orgId 系统机构id
     * @param code  系统角色名称
     * @return 系统角色条数
     * @author: liujun
     * @date: 2021/6/27 1:37 下午
     */
    Integer getCountByName(Long id, Long orgId, String code);

    /**
     * 根据菜单id、URL权限标识，查询拥有当前URL权限标识的角色id
     *
     * @param menuId        菜单id
     * @param urlPermission URL权限标识
     * @return 角色id
     * @author: liujun
     * @date: 2021/7/2 5:52 下午
     */
    List<Long> getRoleIdByUrlPermission(Long menuId, String urlPermission);

    /**
     * 根据系统角色id，查询系统角色菜单、按钮权限列表
     *
     * @param roleId 角色id
     * @return 系统角色菜单、权限列表
     * @author: liujun
     * @date: 2021/7/5 5:49 下午
     */
    SysRolePermResult getPermByRoleId(Long roleId);

    /**
     * 根据系统角色菜单、按钮权限修改请求参数、修改系统角色权限
     *
     * @param params 系统角色菜单、按钮权限修改请求参数
     * @return 修改结果
     * @author: liujun
     * @date: 2021/7/5 5:51 下午
     */
    Boolean modifyPerm(SysRolePermParams params);
}
